Temporary Tables এবং Table Variables T-SQL-এ ডেটা স্টোর করার জন্য ব্যবহৃত দুটি ভিন্ন ধরনের অবজেক্ট। তবে তাদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে যা তাদের ব্যবহার এবং কার্যকারিতাকে প্রভাবিত করে। নিচে Temporary Tables এবং Table Variables এর মধ্যে পার্থক্যগুলি বিস্তারিতভাবে আলোচনা করা হলো:
১. ডেফিনিশন এবং স্কোপ
- Temporary Tables:
- Temporary Tables সাধারণত একটি # (Single Hash) বা ## (Double Hash) চিহ্ন দ্বারা চিহ্নিত হয়। এগুলি একটি সেশন বা একটি কনেকশনের জন্য সময়সীমিত হয় এবং Session-level বা Global-level হতে পারে।
- Session-level Temporary Tables: এই ধরনের টেবিল কেবল সেই সেশন বা কনেকশনে উপলব্ধ থাকে যেখানে এটি তৈরি করা হয়েছে এবং সেই সেশন বন্ধ না হওয়া পর্যন্ত জীবিত থাকে।
- Global Temporary Tables:
##দিয়ে শুরু হয় এবং সমস্ত সেশনে উপলব্ধ থাকে, তবে টেবিলটি যখন আর কোনো সেশনে ব্যবহার করা না হয়, তখন এটি ডিলিট হয়ে যায়।
- Table Variables:
- Table Variables হল একটি ধরনের ভেরিয়েবল যা DECLARE দিয়ে ঘোষণা করা হয় এবং সাধারণত ছোট ডেটা সেটে ব্যবহৃত হয়। এটি Local-level ডেটা স্টোরেজ হিসাবে কাজ করে এবং টেবিলের মতো আচরণ করতে পারে, তবে এটি একটি variable হিসাবে ব্যবহৃত হয় এবং তার স্কোপ শুধুমাত্র স্টোরড প্রসিডিউর, ফাংশন, বা স্ক্রিপ্টের মধ্যে সীমাবদ্ধ থাকে।
২. পারফরম্যান্স
- Temporary Tables:
- Temporary Tables বেশি জটিল ডেটা বা বৃহৎ ডেটাসেটের জন্য উপযুক্ত।
- এই টেবিলগুলো Indexes এবং Constraints (যেমন Primary Key, Foreign Key) সমর্থন করে, যা পারফরম্যান্স উন্নত করতে সহায়ক হতে পারে।
- Disk-based: Temporary Tables সাধারণত ডিস্কে স্টোর হয়, যা বড় ডেটাসেটের ক্ষেত্রে কিছু সময় প্রয়োগ করতে পারে, তবে স্বয়ংক্রিয়ভাবে পরিষ্কার হয়ে যায়।
- Table Variables:
- Table Variables ছোট ডেটাসেটের জন্য উপযুক্ত, এবং সাধারণত In-memory (মেমোরি ভিত্তিক) স্টোরেজ ব্যবহার করে।
- পারফরম্যান্সে সাধারণত ভালো, কারণ এটি মেমোরিতে চলে এবং ডিস্কের সাথে সম্পর্কিত নয়।
- Table Variables সাধারণত Indexes সমর্থন করে না (যদিও Primary Key ও Unique Constraints সমর্থন করে), যা তাদের কার্যকারিতা কিছুটা সীমিত করে।
৩. লকিং এবং ট্রানজেকশন
- Temporary Tables:
- Temporary Tables ট্রানজেকশন এবং লকিং মেকানিজম সমর্থন করে। এগুলি Explicit Locks (যেমন READ COMMITTED) এর অধীনে কাজ করে, অর্থাৎ আপনি যখন এই টেবিলগুলিতে ডেটা লেখেন বা পড়েন তখন SQL Server অটোমেটিকভাবে লকিং প্রয়োগ করে।
- Table Variables:
- Table Variables তেমন কোন লকিং মেকানিজম সমর্থন করে না। এগুলি মূলত memory-resident হওয়ায় কোনো Explicit Locking করা হয় না এবং এতে transaction log কম থাকে, তবে এটি বড় ডেটাসেটের ক্ষেত্রে কম কার্যকরী হতে পারে।
৪. ডেটা ইনসার্ট এবং ম্যানিপুলেশন
- Temporary Tables:
- Temporary Tables সাধারণ টেবিলের মতো ব্যবহার করা যায়। আপনি INSERT, UPDATE, DELETE, এবং SELECT সহ অন্যান্য SQL অপারেশন চালাতে পারেন। এই টেবিলগুলিতে JOIN বা Aggregations এর মতো জটিল অপারেশনও করা সম্ভব।
- Table Variables:
- Table Variables এ ডেটা ইনসার্ট, আপডেট, এবং সিলেক্ট করা যায়, তবে এটি বড় ডেটাসেটের জন্য সেরা না। তবে এদের সাথে JOIN করতে পারবেন, তবে এগুলিতে অনেক জটিল অপারেশন কার্যকরী নাও হতে পারে।
৫. স্বচ্ছতা (Scope)
- Temporary Tables:
- Temporary Tables সেশনের মধ্যে Global বা Session-specific হতে পারে, এবং একাধিক সেশন বা ইউজার একই টেবিল ব্যবহার করতে পারে (বিশেষত Global Temporary Tables ক্ষেত্রে)।
- Table Variables:
- Table Variables এর স্কোপ একটি স্টোরড প্রসিডিউর বা স্ক্রিপ্টের মধ্যে সীমাবদ্ধ থাকে। একবার এই স্কোপ শেষ হলে, এটি স্বয়ংক্রিয়ভাবে ডিলিট হয়ে যায়।
৬. ডিলিট এবং পরিষ্কার (Cleanup)
- Temporary Tables:
- Temporary Tables সাধারণত DROP কমান্ড বা সেশন বন্ধ হলে নিজে নিজে ডিলিট হয়ে যায়।
- যদি আপনি Session-level Temporary Table তৈরি করেন, তবে এটি সেশন বন্ধ না হওয়া পর্যন্ত জীবিত থাকে।
- Table Variables:
- Table Variables একটি Local scope হিসাবে কাজ করে এবং END বা RETURN কমান্ডের পরই এটি পরিষ্কার হয়ে যায়। এর জন্য আলাদাভাবে ডিলিট করার প্রয়োজন নেই।
৭. শর্ত (Conditions)
- Temporary Tables:
- Temporary Tables সাধারণত বড় ডেটা প্রক্রিয়াকরণ এবং ম্যানিপুলেশন করার জন্য ব্যবহৃত হয়। সেগুলিতে Primary Keys, Indexes, এবং Constraints সেট করা সম্ভব, যা তাদের আরও শক্তিশালী এবং কার্যকরী করে তোলে।
- Table Variables:
- Table Variables ছোট, সহজ ডেটা সংরক্ষণ এবং প্রক্রিয়াকরণ এর জন্য ব্যবহার করা হয়, এবং এদের কোন Indexes নেই। তবে Primary Key বা Unique Constraints ব্যবহার করা সম্ভব।
সারাংশ
| বৈশিষ্ট্য | Temporary Tables | Table Variables |
|---|---|---|
| স্কোপ | Session বা Global | Local (একটি স্টোরড প্রসিডিউর/ফাংশন পর্যন্ত) |
| পারফরম্যান্স | বড় ডেটাসেটের জন্য ভালো (Disk-based) | ছোট ডেটাসেটের জন্য ভালো (In-memory) |
| লকিং এবং ট্রানজেকশন | লকিং এবং ট্রানজেকশন সমর্থন করে | কোন লকিং নয়, ট্রানজেকশন log কম |
| ডেটা ম্যানিপুলেশন | Complex JOIN, Aggregations সমর্থন করে | সহজ ডেটা ম্যানিপুলেশন, Complex অপারেশন কম |
| ডিলিট এবং পরিষ্কার | সেশন বন্ধ বা DROP কমান্ডে ডিলিট হয় | END বা RETURN এর পরে পরিষ্কার হয় |
| Constraints এবং Indexes | Constraints এবং Indexes সমর্থন করে | কিছু কাস্টম Constraints সমর্থন করে, তবে Indexes সমর্থন করে না |
উপসংহারে, Temporary Tables এবং Table Variables দুটোই ডেটা স্টোর করার জন্য ব্যবহৃত হয়, তবে তাদের ব্যবহারের পরিধি, পারফরম্যান্স এবং ফিচারগুলো বিভিন্ন। সাধারণত, বড় ডেটাসেট এবং জটিল ডেটা ম্যানিপুলেশন এর জন্য Temporary Tables ব্যবহার করা হয়, আর ছোট এবং দ্রুতগতির ডেটা প্রক্রিয়াকরণের জন্য Table Variables ব্যবহার করা হয়।
Read more